08. 练习
练习
现在你可以使用 C++ 来编写程序了。
练习是提高 C++ 技能的最佳方式。我们提供了一些说明来帮助你入手。这一次,我们并没有配置代码编写栏,因此你需要在你的电脑本地进行程序编译和运行。
这些练习并不打分,因此你可以自行决定完成多少。在 C++ 基础的课程结尾,我们会有一个更加全面的项目,要求你将 Python 代码翻译成 C++ 代码。
如果你遇到了困难,不确定如何编写某段代码,或是不知道怎样解决一个错误,你可以使用 Google 或是 Bing 等搜索引擎。你可以直接复制粘贴错误信息,通常情况下,早已有人详细解释了这些错误是什么,以及如何解决它们。
练习 1
在机器人定位的课程中,Sebastian Thrun 已经带领你了解了一维机器人传感和运动的 Python 代码。最后你得到了一个 sense() 函数,它基于传感器的测量数据来更新概率。你也得到了一个 move() 函数,它根据机器人在网格中的运动更新概率。
现在请将下面的 Python 代码翻译成 C++ 代码:
p = [0.2, 0.2, 0.2, 0.2, 0.2]
world = ['green', 'red', 'red', 'green', 'green']
measurements = ['red', 'green']
motions = [1,1]
pHit = 0.6
pMiss = 0.2
pExact = 0.8
pOvershoot = 0.1
pUndershoot = 0.1
def sense(p, Z):
q=[]
for i in range(len(p)):
hit = (Z == world[i])
q.append(p[i] * (hit * pHit + (1-hit) * pMiss))
s = sum(q)
for i in range(len(q)):
q[i] = q[i] / s
return q
def move(p, U):
q = []
for i in range(len(p)):
s = pExact * p[(i-U) % len(p)]
s = s + pOvershoot * p[(i-U-1) % len(p)]
s = s + pUndershoot * p[(i-U+1) % len(p)]
q.append(s)
return q
for k in range(len(measurements)):
p = sense(p, measurements[k])
p = move(p, motions[k])
print p
练习 2
请编写一个含有两个矩阵的 C++ 函数,并输出它们的乘积。你需要保证在这个函数中,两个矩阵可以相乘。如果矩阵一是 m 行 n 列,矩阵二是 w 行 z 列,那么 n 必须等于 w, 而最终得到的矩阵是 m 行 z 列。